/*
* jPushTemplate.js
* name:xiaojia 小嘉
* email:iatt@qq.com
* qq:273142650
* time:2012.4.2 16:44
*/

jPushTemplate = {

	debug: false,

	data: {

		templateConfig: null,

		serviceList: [],

		defaultPage: 'default'

	},

	refresh: function () {

		this.data.templateConfig = null;

	},

	init: function () {
		//从jPush.data.Config.default中获取jPushTemplateConfig.xml文档对象,并加载模板（head body）内容到页面
		this.getTemplate();
		//加载jPushTemplateConfig.xml ->file->pages[key='default']->style->add节点下的css文件
		this.getStyle();
		//把 file->pages[key='default']->script->add节点 保存在 this.data.serviceList数组中
		this.getServiceList();
		//计算 file->pages[key='default']->script->add节点数量,即this.data.serviceList数组数量
		this.loadFileNum();
		//加载所有file->pages[key='default']->script->add节点 即this.data.serviceList中保存的文件
		this.getServiceFile(0);	

	},

	loadFileNum: function () {

		jPush.loadingData.template.all = this.data.serviceList.length;

	},
	//方法入口
	load: function (key) {

		if (typeof key == 'undefined') {

			key = 'default';

		}
		
		this.defaultPage = key;
		//初始化方法
		this.init();

	},
	//加载jPushTemplateConfig.xml ->file->pages[key='default']->style->add节点下的css文件
	getStyle: function () {

		var url;

		var _this = this;
		//file->pages[key='default']->style->add节点
		this.getFilePages().find('style add').each(

			function () {

				url = $(this).attr('value');

				if (document.createStyleSheet) {

					document.createStyleSheet(url);

				} else {

					$('<link href="' + url + '" rel="stylesheet" type="text/css" />').appendTo('head');

				}

			}

		);

	},
	//把 file->pages[key='default']->script->add节点 保存在 this.data.serviceList数组中
	getServiceList: function () {

		var _this = this;
		//file->pages[key='default']->script->add节点
		this.getFilePages().find('script add').each(

			function () {

				_this.data.serviceList.push($(this).attr('value'));

			}

		);

	},
	//加载所有file->pages[key='default']->script->add节点 即this.data.serviceList中保存的文件
	getServiceFile: function (num) {
		//所有文件加载完成后，本js调用结束
		if (num >= this.data.serviceList.length) {

			return;

		}
		//加载script文件
		var script = jPush.appendScript(this.data.serviceList[num]);

		jPush.ready(script, function () {

			jPush.loadingSuccess('template');
			//递归加载下一个script文件
			jPushTemplate.getServiceFile(++num);

		});

	},
	//获取jPushTemplateConfig.xml文档对象,并加载模板（head body）内容到页面
	getTemplate: function () {

		var _this = this;

		var xmlHttp;
		//获取jPushTemplateConfig.xml文档对象
		xmlHttp = this.getTemplateConfig();
		//file->pages[key='default']->node->add  获取head.html和body.html地址
		xmlHttp.find('file pages:[key=' + this.defaultPage + '] node add').each(

			function () {
				//加载模板页面内容添加到对应的标签下：head.html->head和body.html->body
				_this.getTemploatePages($(this).attr('value'), $(this).attr('key'));

			}

		);

	},
	//file->pages[key='default']文档对象
	getFilePages: function () {

		return this.getTemplateConfig().find('file pages:[key=' + this.defaultPage + ']');

	},

	getConfig: function () {

		return this.getTemplateConfig().find('defaultConfig');

	},

	getXmlData: function (key) {

		return this.getTemplateConfig().find('xmlData add:[key=' + key + ']').attr('value');

	},
	//加载模板页面内容添加到对应的标签下：head.html和body.html
	getTemploatePages: function (url, node) {

		$.ajax({

			type: 'GET',

			url: url,

			async: true,

			cache: !this.debug,

			dataType: 'html',

			success: function (xmlHttp) {

				$(xmlHttp).appendTo(node);

			}

		});

	},
	//获取jPushTemplateConfig.xml文档对象
	getTemplateConfig: function () {

		var _xmlHttp;

		if (this.data.templateConfig != null) {

			return this.data.templateConfig;

		} else {

			$.ajax({

				type: 'GET',
				//config->add->key = defaultTemplate
				url: jPush.data.Config.defaultTemplate,

				dataType: 'xml',

				async: false,

				cache: !this.debug,

				success: function (xmlHttp) {

					_xmlHttp = $(xmlHttp).find('templateConfig');

				}

			});

			this.data.templateConfig = _xmlHttp;

			return this.data.templateConfig;

		}

	}

}